using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HerGoS.Interfaces;
using HerGoS.DAO;
using System.Data;
using HerGoS.Administration.Entities;
using HerGoS.Documentos.Exceptions;
using HerGoS.Administration.Engine;

namespace HerGoS.Documentos.Entities
{
    public class GestorCatalogoDocumentos
	{
		public static CatalogoDocumento Obtener(int oid)
		{
            try
            {
                IRepository repo = RepositoryFactory.Create(Config.RepositoryDocumentosName);
                repo.Nombre = "CATALOGODOCUMENTOS_SP";
                repo.AddParameter("@ACCION", "BYID");
                repo.AddParameter("@ID", oid);
                DataTable dt = repo.ExecuteDataTable();
                CatalogoDocumento result = dt.ToGenericList<CatalogoDocumento>(CatalogoDocumentoConverter).FirstOrDefault();
                return result;
            }
            catch (Exception ex)
            {
                throw new TipoAccionGetException(ex);
            }		
		}



        public static List<CatalogoDocumento> Consultar(string codigo, string descripcion, bool? activo)
        {
            try
            {
                IRepository repo = RepositoryFactory.Create(Config.RepositoryDocumentosName);
                repo.Nombre = "CATALOGODOCUMENTOS_SP";
                repo.AddParameter("@ACCION", "CONSULTA");
                repo.AddParameter("@ID", null);
                repo.AddParameter("@CODIGO", codigo);
                repo.AddParameter("@DESCRIPCION", descripcion);
                repo.AddParameter("@ACTIVO", activo);
                DataTable dt = repo.ExecuteDataTable();
                List<CatalogoDocumento> result = dt.ToGenericList<CatalogoDocumento>(CatalogoDocumentoConverter);
                return result;
            }
            catch (Exception ex)
            {
                throw new TipoAccionGetException(ex);
            }
        }

        public static List<CatalogoDocumento> Consultar(string codigo, string descripcion)
        {
            return Consultar(codigo, descripcion, true);

        }

        public static List<CatalogoDocumento> Consultar()
        {
            return Consultar(null, null, null);

        }

		#region Converter

        public static CatalogoDocumento CatalogoDocumentoConverter(DataRow row)
        {
            CatalogoDocumento catalogodocumento = new CatalogoDocumento
            {
                OID = row["tcatID"].ToInteger(),
				Persistencia = EstadoPersistencia.UPDATE,
                Codigo = row["tcatCODIGO"].ToString(),
                Descripcion = row["tcatDESCRIPCION"].ToString(),
                Activo = row.IsNull("FECHA_BAJA") ? true : false
            };

            return catalogodocumento;
        }
        #endregion
	}
}